print " 7. Create/append full privileges for an existing database\n";
print " and host combination (user has FULL privilege)\n";
print " 8. Remove all privileges for for an existing database and\n";
print " host combination.\n";
print " (user will have all permission fields set to N)\n";
print " 0. exit this program\n";
print "\nMake your choice [1,2,3,4,5,6,7,0]: ";
while (<STDIN>) {
$answer = $_;
chomp($answer);
if ($answer =~ /^[12345678]$/) {
if ($answer == 1) {
setpwd();
} elsif ($answer =~ /^[2345678]$/) {
addall($answer);
} else {
print "Sorry, something went wrong. With such option number you should not get here.\n\n";
$end = 1;
}
} elsif ($answer == 0) {
print "We hope we can help you next time \n\n";
$end = 1;
} else {
print "Your answer was $answer\n";
print "and that's wrong .... Try again\n";
}
last;
}
}
}
###
# set a password for a user
###
sub setpwd
{
my ($user,$pass,$host) = "";
print "\n\nSetting a (new) password for a user.\n";
$user = user();
$pass = newpass($user);
$host = hosts($user);
print "#"x70;
print "\n\n";
print "That was it ... here is an overview of what you gave to me:\n";
print "The username : $user\n";
# print "The password : $pass\n";
print "The host : $host\n";
print "#"x70;
print "\n\n";
print "Are you pretty sure you would like to implement this [yes/no]: ";
my $no = <STDIN>;
chomp($no);
if ($no =~ /n/i)
{
print "Okay .. that was it then ... See ya\n\n";
return(0);
}
else
{
print "Okay ... let's go then ...\n\n";
}
$user = $dbh->quote($user);
$host = $dbh->quote($host);
if ($pass eq '')
{
$pass = "''";
}
else
{
$pass = "PASSWORD(". $dbh->quote($pass) . ")";
}
my $sth = $dbh->prepare("update user set Password=$pass where User = $user and Host = $host") || die $dbh->errstr;
$sth->execute || die $dbh->errstr;
$sth->finish;
print "The password is set for user $user.\n\n";
}
###
# all things which will be added are done here
###
sub addall {
my ($todo) = @_;
my ($answer,$good,$db,$user,$pass,$host,$priv);
if ($todo == 2) {
$db = newdatabase();
} else {
$db = database();
}
$user = newuser();
$pass = newpass("$user");
$host = newhosts();
print "#"x70;
print "\n\n";
print "That was it ... here is an overview of what you gave to me:\n";
print "The database name : $db\n";
print "The username : $user\n";
# print "The password : $pass\n";
print "The host(s) : $host\n";
print "#"x70;
print "\n\n";
print "Are you pretty sure you would like to implement this [yes/no]: ";
my $no = <STDIN>;
chomp($no);
if ($no =~ /n/i) {
print "Okay .. that was it then ... See ya\n\n";
return(0);
} else {
print "Okay ... let's go then ...\n\n";
}
if ($todo == 2) {
# create the database
if ($db) {
my $sth = $dbh->do("CREATE DATABASE $db") || $dbh->errstr;
} else {
print STDERR "What do you want? You wanted to create new database and add new user, right?\n";
die "But then specify databasename, please\n";
}
}
if ( ( !$todo ) or not ( $todo =~ m/^[2-8]$/ ) ) {
print STDERR "Sorry, select option $todo isn't known inside the program .. See ya\n";
quit();
}
my @hosts = split(/,/,$host);
if (!$user) {
die "username not specified: $user\n";
}
if (!$db) {
die "databasename is not specified nor *\n";
}
foreach $host (@hosts) {
# user privileges: SELECT
if (($todo == 2) || ($todo == 3)) {
$sth = $dbh->do("GRANT SELECT ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
} elsif ($todo == 4) {
# user privileges: SELECT,INSERT,UPDATE,DELETE
$sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
} elsif ($todo == 5) {
# user privileges: SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES
$sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
} elsif ($todo == 6) {
# admin privileges: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS
$sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
} elsif ($todo == 7) {
# all privileges
$sth = $dbh->do("GRANT ALL ON $db.* TO \'$user\'\@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
} elsif ($todo == 8) {
# all privileges set to N
$sth = $dbh->do("REVOKE ALL ON *.* FROM \'$user\'\@\'$host\'") || die $dbh->errstr;